#ifndef LOGWORKER_H
#define LOGWORKER_H

#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QQueue>
#include <QDateTime>
#include <QSqlDatabase>

// 日志记录结构体
struct LogEntry {
    QDateTime timestamp;
    QString logType;      // SYSTEM, OPERATION, ALARM, ERROR
    QString logLevel;     // INFO, WARNING, ERROR
    QString content;
    int userId;
    int deviceId;

    LogEntry() : userId(0), deviceId(0) {}

    LogEntry(const QDateTime& ts, const QString& type, const QString& level,
             const QString& cont, int uid = 0, int did = 0)
        : timestamp(ts), logType(type), logLevel(level),
          content(cont), userId(uid), deviceId(did) {}
};

class LogWorker : public QThread
{
    Q_OBJECT

public:
    explicit LogWorker(QObject *parent = nullptr);
    ~LogWorker();

    // 添加日志到队列
    void addLog(const LogEntry& entry);

    // 停止工作线程
    void stop();

    // 设置自动导出阈值
    void setAutoExportThreshold(int threshold);

    // 获取当前日志数量
    int getCurrentLogCount();

signals:
    // 日志已写入信号
    void logWritten(int totalCount);

    // 自动导出完成信号
    void autoExportCompleted(const QString& filePath, int exportedCount);

    // 错误信号
    void errorOccurred(const QString& error);

protected:
    void run() override;

private:
    QMutex m_mutex;
    QWaitCondition m_condition;
    QQueue<LogEntry> m_logQueue;
    bool m_stopped;
    int m_autoExportThreshold;  // 自动导出阈值,默认1000

    QSqlDatabase m_database;

    // 初始化数据库连接(线程内使用)
    bool initDatabaseConnection();

    // 写入单条日志到数据库
    bool writeLogToDatabase(const LogEntry& entry);

    // 检查并执行自动导出
    void checkAndAutoExport();

    // 导出日志到文件
    bool exportLogsToFile(const QString& filePath);

    // 清空数据库日志
    bool clearDatabaseLogs();

    // 获取日志总数
    int getLogCount();

    // 生成导出文件路径
    QString generateExportFilePath();
};

#endif // LOGWORKER_H
